package com.feri.api.service.impl;

import com.feri.api.dao.ScorelogDao;
import com.feri.api.dao.UsersignDao;

import com.feri.api.service.intf.UserlevelService;
import com.feri.api.service.intf.UsersignService;
import com.feri.api.util.DateUtil;
import com.feri.api.vo.R;
import com.feri.common.entity.Usersign;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author: 学习强国
 * @Date: 2022/10/02 13:26:55
 */
@Service
public class UsersignServiceImpl implements UsersignService {

    private final UsersignDao dao;
    private final UserlevelService levelService;
    private final ScorelogDao logDao;

    public UsersignServiceImpl(UsersignDao dao, UserlevelService levelService, ScorelogDao logDao) {
        this.dao = dao;
        this.levelService = levelService;
        this.logDao = logDao;
    }

    /**
     * 验证用户今日是否可以签到*/
    @Override
    public R checkSign(String token) {
        System.out.println(token);
        //1.查询
        Usersign usersign=dao.selectLast(Long.parseLong(token));
        //2.验证
        if(usersign==null){
            //没有签到过
            return R.ok();
        }else {
            //3.创建日期格式化对象
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
            //4.比较今日是否可以签到
            if(sdf.format(usersign.getCtime()).equals(sdf.format(new Date()))){
                return R.fail("亲，今日已签到！");
            }else {
                return R.ok();
            }
        }
    }


    @Override
    @Transactional
    public R createSign(String token) {
        //实现签到
        //1.查询最后一次的签到数据
        Long uid = Long.parseLong(token);
        Usersign usersign = dao.selectLast(uid);

        Usersign sign = new Usersign();
//        sign.setUid((uid));
//        sign.setCtime(new Date());
//        Random random = new Random();
//        sign.setScore(random.nextInt(4)+5);
        sign.setDays(1);
        sign.setExscore(0);
        //2.验证是否有签到数据
        if(usersign==null){
            //首次签到
            sign.setExscore(50);
            sign.setInfo("恭喜你获得首签好礼");
        }else {
            //3.获取相差的天数
            int d = DateUtil.diffDay(usersign.getCtime());
            if(d==0){
                //今日已签到
                return R.fail("亲，请勿重复签到！");
            }else if (d==1){
                //连续签到 需要验证是否给予签到奖励
                sign.setDays(usersign.getDays()+1);
//                //根据规则 验证是否给予奖励  如果同时满足多个，只取奖励多的
//                if(sign.getDays()%365==0){
//                    //连续签到365天或整数倍
//                    sign.setExscore(300);
//                    sign.setInfo("欢迎签到"+sign.getDays()+"天，给予奖励300");
//                }else if (sign.getDays()%30==0){
//                    //连续签到30天或整数倍
//                    sign.setExscore(100);
//                    sign.setInfo("欢迎签到"+sign.getDays()+"天，给予奖励100");
//                }else if (sign.getDays()%7==0){
//                    //连续签到7天或整数倍
//                    sign.setExscore(20);
//                    sign.setInfo("欢迎签到"+sign.getDays()+"天，给予奖励20");
//                }else if (sign.getDays()%3==0) {
//                    //连续签到3天或整数倍
//                    sign.setExscore(10);
//                    sign.setInfo("欢迎签到"+sign.getDays()+"天，给予奖励10");
//                }
            }else {
                //断签
                //验证是否需要给予 回归奖励
                if (d >365){
                    //回归奖励
                    sign.setExscore(100);
                    sign.setInfo("欢迎回归，你已经"+sign.getDays()+"天没有签到，给予奖励100");
                }
            }
        }
//        dao.insert(sign);
//        //6.更新积分并校验等级是否需要升级
//        levelService.updateLevel(uid, sign.getScore()+sign.getExscore());
//        //7.记录积分变动流水
//        logDao.insert(new Scorelog(uid, 1, sign.getScore()+sign.getExscore(), "签到奖励积分"));

        return R.ok(sign.getScore()+sign.getExscore());
    }



    @Override
    public R queryAll() {
        return R.ok(dao.selectList(null));
    }

    @Override
    public R save(Usersign obj) {
        return null;
    }
}